function countMaxOrSubsets(nums) {
  let maxOr = 0; // 记录最大的按位或结果
  let count = 0; // 记录能得到最大值的子集数量
  const n = nums.length;

  // 遍历所有非空子集（从1到2^n - 1）
  // 使用二进制掩码表示子集，第i位为1表示包含nums[i]
  for (let mask = 1; mask < 1 << n; mask++) {
    let currentOr = 0;
    // 计算当前子集的按位或结果
    for (let i = 0; i < n; i++) {
      // 检查第i位是否为1，如果是则将nums[i]加入按位或运算
      if (mask & (1 << i)) {
        currentOr |= nums[i];
      }
    }

    // 更新最大值和计数
    if (currentOr > maxOr) {
      maxOr = currentOr;
      count = 1;
    } else if (currentOr === maxOr) {
      count++;
    }
  }

  return count;
}

// 测试示例
console.log(countMaxOrSubsets([3, 1])); // 输出: 2
console.log(countMaxOrSubsets([2, 2, 2])); // 输出: 7
console.log(countMaxOrSubsets([3, 2, 1, 5])); // 输出: 6
